package inteligenciaArtificial;

import java.util.Vector;
import nivel.Nivel;
import powerup.Moneda;

/**
 * La clase ControladorMonedas modela un director que se encarga de controlar
 * las monedas en caja. Contiene una coleccion en la cual se almacenan, y brinda
 * metodos para actualizarlo. Ademas contiene un metodo que elimina a las
 * monedas una vez activadas
 * 
 * @author Agustin Orge (LU.85538)
 * @author Victoria Martinez de la Cruz (LU.87620)
 */
public class ControladorMonedas implements Runnable {

	/**
	 * Atributos de instancia
	 */
	private Vector<Moneda> monedas;
	private Nivel nivel;
	private boolean threadDone;

	/**
	 * Constructor de ControladorMonedas
	 * 
	 * @param n
	 *            nivel asoaciado al controlador
	 */
	public ControladorMonedas(Nivel n) {
		monedas = new Vector<Moneda>();
		nivel = n;
		threadDone = false;
	}

	/**
	 * Agrega una moneda a la coleccion
	 * 
	 * @param mo
	 *            moneda a agregar
	 */
	public void agregarMoneda(Moneda mo) {
		monedas.add(mo);
	}

	/**
	 * Recorre y remueve segun el estado de activacion de la moneda
	 */
	public void recorrerYremover() {
		Moneda aux[] = new Moneda[monedas.size()];
		monedas.toArray(aux);
		for (int i = 0; i < aux.length; i++) {
			Moneda mo = aux[i];
			if (mo.getActivado()) {
				eliminarMoneda(mo);
			}
		}
	}

	/**
	 * Elimina la moneda pasada por parametro
	 * 
	 * @param m
	 *            moneda que se desea eliminar
	 */
	public void eliminarMoneda(Moneda m) {
		boolean encontre = false;
		int i = 0;
		while (!encontre && i < monedas.size()) {
			Moneda mo = monedas.get(i);
			if (mo.getLabel().equals(m.getLabel())) {
				nivel.getGrafica().getPanelEntidades()
						.eliminarEntidad(mo.getLabel());
				monedas.remove(i);
				encontre = true;
			}
			i++;
		}
	}

	/**
	 * Termina el thread
	 */
	public void threadDone() {
		threadDone = true;
	}

	/**
	 * Bucle de control
	 */
	@Override
	public void run() {

		while (!threadDone) {
			recorrerYremover();
			try {
				Thread.sleep(1500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

}
